/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.mindbox.mueblesalpes.presentacion.compras;

import com.mindbox.mueblesalpes.negocio.exception.TiendaException;
import com.mindbox.mueblesalpes.presentacion.sesion.SessionInfo;
import com.mindbox.mueblesalpes.presentacion.sesion.SessionWeb;
import com.mindbox.mueblesalpes.presentacion.utils.Mensajes;
import com.mindbox.mueblesalpes.presentacion.utils.ReglasNavegacion;
import com.mindbox.mueblesalpes.presentacion.utils.UtilidadesSesion;
import javax.faces.context.FacesContext;

/**
 * Clase para manejar los productos que se agregan al Carrito.
 * Tiene la gestión con la intefaz Web.
 * @author jsanchez
 */
public class AgregarCarritoBackingBean {

    private boolean validoUsuario = true;
    private boolean puedeEfectuarCompra;
    private SessionWeb sesionWeb;
    private SessionInfo sesionInfo;

    /** Creates a new instance of AgregarCarritoBackingBean */
    public AgregarCarritoBackingBean() {
        this.sesionInfo = UtilidadesSesion.verificarSessionInfo();
        this.validoUsuario = UtilidadesSesion.verificarSessionInfoAlAgregar();
        this.sesionWeb = UtilidadesSesion.getSessionWeb(FacesContext.getCurrentInstance());
        this.puedeEfectuarCompra = UtilidadesSesion.puedeEfectuarCompraAlAgregar(this.sesionInfo,
                this.sesionWeb, this.validoUsuario);
    }

    /**
     * Metodo que se ejecuta cuando se da clic en el boton continuar compra.
     * @return
     */
    public String continuarCompra() {
        return ReglasNavegacion.continuar_compra.name();
    }

    /**
     * Metodo que se ejecuta cuando se da clic en efectuar Compra.
     * @return
     */
    public String efectuarCompra() {
        String regla = "";
        if (this.sesionInfo != null && this.sesionWeb != null) {
            try {
                sesionWeb.realizarVenta(sesionInfo.getCliente(), sesionInfo.getUsuario());
                regla = ReglasNavegacion.pagar.name();
            }catch(TiendaException e){
                Mensajes.asignarMensajeError(e.getMessage());
            }catch(Exception e){
                Mensajes.asignarMensajeError("Error inesperado:"+e.getMessage());
            }
        }
        return regla;
    }

    /**
     * Obtiene si el usuario valido o no.
     * @return booelan
     */
    public boolean isValidoUsuario() {
        return validoUsuario;
    }

    /**
     * Actualiza si el usuario es valido o no
     * @param validoUsuario
     */
    public void setValidoUsuario(boolean validoUsuario) {
        this.validoUsuario = validoUsuario;
    }

    /**
     * Obtiene si se puede efectuar la compra.
     * @return boolean
     */
    public boolean isPuedeEfectuarCompra() {
        return puedeEfectuarCompra;
    }

    /**
     * Obtiene si se puede efectuar la compra.
     * @return boolean
     */
    public boolean getPuedeEfectuarCompra() {
        return puedeEfectuarCompra;
    }

    /**
     * Coloca si se puede efectuar una compra.
     * @param puedeEfectuarCompra
     */
    public void setPuedeEfectuarCompra(boolean puedeEfectuarCompra) {
        this.puedeEfectuarCompra = puedeEfectuarCompra;
    }
}